#pragma once

#include "../public/constants.hpp"

namespace bla {
	template<typename _Value>
	struct _isLeftMaxFunctor {
		bool operator() (_Value le, _Value ri) {
			return le > ri;
		}
	};

	/*
	 * input what, return what:)
	 */
	template<typename _Value>
	struct _identitySingleFunctor {
		_Value operator() (_Value v) {
			return v;
		}
	};

	/*
	 * return first of pair<>
	 */
	template<typename _keyValue, typename _pairValue>
	struct _extractFirstOfPairFunctor {
		_keyValue operator() (_pairValue p) {
			return p.first;
		}
	};

	/*
	 * compare two same type:), isSame
	 */
	template<typename _Value>
	struct _identitySameTypeCompareFunctor {
		bool operator() (_Value v1, _Value v2) {
			return v1 == v2;
		}
	};

	/*
	 * compare two same type:), isLessThan
	 */
	template<typename _Value>
	struct _sameTypeLessThanCompareFunctor {
		bool operator() (_Value v1, _Value v2) {
			return v1 < v2;
		}
	};
}
